package com.tjs.lucky.domain.activity.repository;

import com.tjs.lucky.domain.activity.model.vo.DisAwardInvoiceVO;
import com.tjs.lucky.domain.activity.model.vo.UserTakeActivityVO;
import com.tjs.lucky.domain.strategy.model.vo.DrawAwardVO;

import java.util.Date;
import java.util.List;

/**
 * @Author: 田佳澍
 * @Description:
 * @DateTime: 2023/5/25 16:21
 **/
public interface IUserTakeActivityRepository {
    /**
     * 领取活动
     *
     * @param activityId        活动ID
     * @param activityName      活动名称
     * @param strategyId        抽奖策略ID
     * @param uId               用户ID
     * @param takeDate          领取时间
     * @param takeId            领取ID
     */
    void takeActivity(Long activityId, String activityName, Long strategyId, String uId,Integer userTakeLeftCount, Date takeDate, Long takeId, Integer activityPartLeftCount);

    /**
     * 保存抽奖信息
     * @param drawAwardVO 中奖信息
     */
    void saveUserStrategyExport(DrawAwardVO drawAwardVO,Long activityId);

    /**
     * 扣除个人参与次数
     * @param activityId
     * @param uId
     * @return
     */
    boolean deductUserTakeCount(Long activityId,String uId);

    /**
     * 查询是否存在未执行抽奖领取活动单【user_take_activity 存在 state = 0，领取了但抽奖过程失败的，可以直接返回领取结果继续抽奖】
     *
     * @param activityId 活动ID
     * @param uId        用户ID
     * @return 领取单
     */
    UserTakeActivityVO queryNoConsumedTakeActivityOrder(Long activityId, String uId);

    /**
     * 更新发货单MQ状态  TODO：mq状态应该是export表，state应该去掉
     *
     * @param uId     用户ID
     * @param orderId 订单ID
     * @param mqState MQ 发送状态
     */
    void updateInvoiceMqState(String uId, Long orderId, Integer mqState);

    /**
     * 扫描发货单 MQ 状态，把未发送 MQ 的单子扫描出来，做补偿
     *
     * @return 发货单
     */
    List<DisAwardInvoiceVO> scanInvoiceMqState();

    /**
     * 更新发奖状态
     * @param uId        用户ID
     * @param orderId    订单ID
     * @param grantState 发奖状态
     */
    void updateGrantState(String uId, Long orderId, Integer grantState);
}
